iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Modern Web

前端我又來了 - 30天 Vue學好學滿系列 第 13

[30天 Vue學好學滿 DAY13] 組件

  • 分享至 

  • xImage
  •  

組件

可重複使用的實例,有自己的名子,引入後當元素使用。
Data 透過 return 定義為函數 -> 每個實例各自維護不互相影響

直接 new Vue 帶入參數

data: {
    count: 0,
}

定義為函數

data() {
    return {
      count: 0,
    };
}

實作

定義組件 : HelloWorld.vue
HTML

<button @click="count++">觸發次數 : {{ count }} </button>

srcipt

export default {
  name: "HelloWorld", // 非必要,可移除
  data() {
    return {
      count: 0,
    };
  }
};

於 App.vue 引入並複用
引入

import HelloWorld from './components/HelloWorld.vue';

註冊

components: {
    HelloWorld
},

組件定義名稱:
kebab-case:單詞連接
PascalCase:駝峰式命名法(upper camel case)
ps.兩者可互用

HTML

複用 HelloWorld.vue
<hello-world />
<hello-world ></hello-world>
<HelloWorld />

起前端檢驗
https://ithelp.ithome.com.tw/upload/images/20210912/201295362NxKPDcmfR.png

以上為局部註冊


全局註冊

於核心文件main.js中引入,並透過.component註冊

import HelloWorld from './components/HelloWorld.vue';
Vue.component('component-hello', HelloWorld)

移除App.vue的局部註冊,並新增全局組件於HTML

<!-- 局部註冊 -->
<hello-world />
<hello-world ></hello-world>
<HelloWorld />
<!-- 全局註冊 -->
<component-hello />

起前端檢驗
僅剩全局組件
https://ithelp.ithome.com.tw/upload/images/20210912/20129536dIrTS0CZra.png

上述局部註冊為於特定組件進行引入,若皆從main.js引入,則如下

// 全局
Vue.component('component-hello-global', HelloWorld)
new Vue({
  components: {
    // 局部
    'component-hello-local': HelloWorld
  },
  render: h => h(App),
}).$mount('#app')

有錯誤請不吝指教!
參考資料
https://vuejs.org/v2/guide
https://segmentfault.com/a/1190000019903495

感謝各路大神 /images/emoticon/emoticon31.gif


上一篇
[30天 Vue學好學滿 DAY12] v-model 雙向綁定
下一篇
[30天 Vue學好學滿 DAY14] prop & emit-1
系列文
前端我又來了 - 30天 Vue學好學滿30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言